/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fiap.dao;

import br.com.fiap.vo.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Fabianoss
 */
public class NotasDAO {
    
    private NotasVO notasVO;
    private String query;
    private Connection conn;
    private Statement stmt;
    private PreparedStatement pstmt;
    private ResultSet result;
    private FabricaConexao fb;
    
    public NotasDAO(){
         fb = FabricaConexao.getInstance();        
    }
    
    public void Salvar(NotasVO notasVO){
        this.query = "INSERT INTO `avaliacao1`.`notas` (`valor1`,`valor2`,`valor3`,`valor4`,`iddisciplina`,`idaluno`)VALUES(?,?,?,?,?,?);";
          try {   
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, notasVO.getValor1());
            this.pstmt.setInt(2, notasVO.getValor2());
            this.pstmt.setInt(3, notasVO.getValor3());
            this.pstmt.setInt(4, notasVO.getValor4());
            this.pstmt.setInt(5, notasVO.getDisciplinaVO().getIdDisciplina());
            this.pstmt.setInt(6, notasVO.getAlunoVO().getIdAluno());        
            this.pstmt.execute(); 
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Notas.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void update(NotasVO notasVO){
        this.query = "UPDATE `avaliacao1`.`notas`SET `nota1` = ?,`nota2` = ?,`nota3` = ?,`nota4` = ?,`idDisciplina` = ?,'idAluno' = ? WHERE idnotas = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, notasVO.getValor1());
            this.pstmt.setInt(2, notasVO.getValor2());
            this.pstmt.setInt(3, notasVO.getValor3());
            this.pstmt.setInt(4, notasVO.getValor4());
            this.pstmt.setInt(5, notasVO.getDisciplinaVO().getIdDisciplina());
            this.pstmt.setInt(6, notasVO.getAlunoVO().getIdAluno() );
            this.pstmt.setInt(7, notasVO.getIdNotas());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao inserir Notas.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
    }
    
    public void delete(NotasVO notasVO){        
       this.query = "DELETE FROM `avaliacao1`.`notas`WHERE idnotas = ?;";
          try {
            this.pstmt = fb.getConnection().prepareStatement(query);
            this.pstmt.setInt(1, notasVO.getIdNotas());
            pstmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Notas.: "+ e.getMessage());
        }finally{
              fb.closeConnection(pstmt, null, null);
        }
        
    }
    
    public List<NotasVO> listarNotassVO(){
        List<NotasVO> listaNotasVO = new ArrayList<NotasVO>();
        this.query = "Select n.idnotas"
                    +",n.valor1"
                    +",n.valor2"
                    +",n.valor3"
                    +",n.valor4"
                    +",d.iddisciplina"
                    +",a.idaluno"
                    +",p.idpessoa"
                    +",p.nome aluno"
                    +",d.nome disciplina"
                    +",c.nome curso "
                    +",c.idcurso"
                    + "FROM "
                    + "`avaliacao1`.`notas` n"
                    +",`avaliacao1`.`aluno` a"
                    +",`avaliacao1`.`pessoa` p"
                    +",`avaliacao1`.`disciplina`d"
                    +",`avaliacao1`.`curso`c"
                +"where and n.iddisciplina = d.iddisciplina"
                    +"and n.idaluno = a.idaluno"
                    +"and d.curso_idcurso = c.idcurso"
                    +"and a.idpessoa = p.idpessoa";
          try {
             this.stmt = fb.getConnection().createStatement();
             this.result = stmt.executeQuery(query);
             
             while(result.next()){
                  NotasVO notasVO = new NotasVO();
                 UsuarioVO usuarioVO = new UsuarioVO();
                 DisciplinaVO disciplinaVO = new DisciplinaVO();
                 CursoVO cursoVO = new CursoVO();
                 PessoaVO pessoaVO = new PessoaVO();
                 AlunoVO alunoVO = new AlunoVO();
                 
                 notasVO.setIdNotas(result.getInt("n.idnotas"));
                 notasVO.setValor1(result.getInt("n.valor1"));
                 notasVO.setValor2(result.getInt("n.valor2"));
                 notasVO.setValor3(result.getInt("n.valor3"));
                 notasVO.setValor4(result.getInt("n.valor4"));
                 
                 pessoaVO.setIdpessoa(result.getInt("p.idpessoa"));
                 pessoaVO.setNome(result.getString("aluno"));
                 
                 alunoVO.setIdAluno(result.getInt("a.idaluno"));
                 alunoVO.setPessoaVO(pessoaVO);
                 
                 notasVO.setAlunoVO(alunoVO);
                 
                 cursoVO.setIdCurso(result.getInt("c.idcurso"));
                 cursoVO.setNome(result.getString("nome"));
                 
                 disciplinaVO.setIdDisciplina(result.getInt("d.iddisciplina"));
                 disciplinaVO.setNome(result.getString("disciplina"));
                 
                 disciplinaVO.setCursoVO(cursoVO);
                 
                 notasVO.setdisciplinaVO(disciplinaVO);
                 
                 listaNotasVO.add(notasVO);
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao deletar Notas.: "+ e.getMessage());
        }finally{
             fb.closeConnection(null, stmt, result);
        }
        return listaNotasVO;  
    }
    
     public List<NotasVO> getNotasVOById(int id){
        
        this.query = "Select n.idnotas"
                    +",n.valor1"
                    +",n.valor2"
                    +",n.valor3"
                    +",n.valor4"
                    +",d.iddisciplina"
                    +",a.idaluno"
                    +",p.idpessoa"
                    +",p.nome aluno"
                    +",d.nome disciplina"
                    +",c.nome curso "
                    +",c.idcurso"
                    + "FROM "
                    + "`avaliacao1`.`notas` n"
                    +",`avaliacao1`.`aluno` a"
                    +",`avaliacao1`.`pessoa` p"
                    +",`avaliacao1`.`disciplina`d"
                    +",`avaliacao1`.`curso`c"
                +"where n.idnotas = ?"
                    +"and n.iddisciplina = d.iddisciplina"
                    +"and n.idaluno = a.idaluno"
                    +"and d.curso_idcurso = c.idcurso"
                    +"and a.idpessoa = p.idpessoa";
        List<NotasVO> listaNotasVO = new ArrayList<NotasVO>(); 
        try {
             this.pstmt = fb.getConnection().prepareCall(query);
             this.pstmt.setInt(1, id);
             this.result = pstmt.executeQuery();
             
             while(result.next()){
                 NotasVO notasVO = new NotasVO();
                 UsuarioVO usuarioVO = new UsuarioVO();
                 DisciplinaVO disciplinaVO = new DisciplinaVO();
                 CursoVO cursoVO = new CursoVO();
                 PessoaVO pessoaVO = new PessoaVO();
                 AlunoVO alunoVO = new AlunoVO();
                 
                 notasVO.setIdNotas(result.getInt("n.idnotas"));
                 notasVO.setValor1(result.getInt("n.valor1"));
                 notasVO.setValor2(result.getInt("n.valor2"));
                 notasVO.setValor3(result.getInt("n.valor3"));
                 notasVO.setValor4(result.getInt("n.valor4"));
                 
                 pessoaVO.setIdpessoa(result.getInt("p.idpessoa"));
                 pessoaVO.setNome(result.getString("aluno"));
                 
                 alunoVO.setIdAluno(result.getInt("a.idaluno"));
                 alunoVO.setPessoaVO(pessoaVO);
                 
                 notasVO.setAlunoVO(alunoVO);
                 
                 cursoVO.setIdCurso(result.getInt("c.idcurso"));
                 cursoVO.setNome(result.getString("nome"));
                 
                 disciplinaVO.setIdDisciplina(result.getInt("d.iddisciplina"));
                 disciplinaVO.setNome(result.getString("disciplina"));
                 
                 disciplinaVO.setCursoVO(cursoVO);
                 
                 notasVO.setdisciplinaVO(disciplinaVO);
                 
                 listaNotasVO.add(notasVO);
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Notas.: "+ e.getMessage());
        }finally{
             fb.closeConnection(pstmt, null, result);
        }
        return listaNotasVO;  
    }
    
    public List<NotasVO> getNotasVOByIdAluno(int id){
        
        this.query = "Select n.idnotas"
                    +" ,n.valor1"
                    +" ,n.valor2"
                    +" ,n.valor3"
                    +" ,n.valor4"
                    +" ,d.iddisciplina"
                    +" ,a.idaluno"
                    +" ,p.idpessoa"
                    +" ,p.nome"
                    +" ,d.nome"
                    +" ,c.nome"
                    +" ,c.idcurso"
                    + " FROM `avaliacao1`.`notas` n"
                    +", `avaliacao1`.`aluno` a"
                    +", `avaliacao1`.`pessoa` p"
                    +", `avaliacao1`.`disciplina`d"
                    +", `avaliacao1`.`curso`c"
                +" where n.idaluno = ?"
                    +" and n.iddisciplina = d.iddisciplina"
                    +" and n.idaluno = a.idaluno"
                    +" and d.curso_idcurso = c.idcurso"
                    +" and a.idpessoa = p.idpessoa";
        
        List<NotasVO> listaNotasVO = new ArrayList<NotasVO>(); 
        try {
             this.pstmt = fb.getConnection().prepareStatement(query);
             this.pstmt.setInt(1, id);
             this.result = pstmt.executeQuery();
             
             while(result.next()){
                 NotasVO notasVO = new NotasVO();
                 UsuarioVO usuarioVO = new UsuarioVO();
                 DisciplinaVO disciplinaVO = new DisciplinaVO();
                 CursoVO cursoVO = new CursoVO();
                 PessoaVO pessoaVO = new PessoaVO();
                 AlunoVO alunoVO = new AlunoVO();
                 
                 notasVO.setIdNotas(result.getInt("n.idnotas"));
                 notasVO.setValor1(result.getInt("n.valor1"));
                 notasVO.setValor2(result.getInt("n.valor2"));
                 notasVO.setValor3(result.getInt("n.valor3"));
                 notasVO.setValor4(result.getInt("n.valor4"));
                 
                 pessoaVO.setIdpessoa(result.getInt("p.idpessoa"));
                 pessoaVO.setNome(result.getString("p.nome"));
                 
                 alunoVO.setIdAluno(result.getInt("a.idaluno"));
                 alunoVO.setPessoaVO(pessoaVO);
                 
                 notasVO.setAlunoVO(alunoVO);
                 
                 cursoVO.setIdCurso(result.getInt("c.idcurso"));
                 cursoVO.setNome(result.getString("c.nome"));
                 
                 disciplinaVO.setIdDisciplina(result.getInt("d.iddisciplina"));
                 disciplinaVO.setNome(result.getString("d.nome"));
                 
                 disciplinaVO.setCursoVO(cursoVO);
                 
                 notasVO.setdisciplinaVO(disciplinaVO);
                 
                 listaNotasVO.add(notasVO);
             }            
            
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao selecionar Notas.: "+ e.getMessage());
        }finally{
             fb.closeConnection(pstmt, null, result);
        }
        return listaNotasVO;  
    } 
}

    